<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 数组遍历方法
    // forEach map filter some every  reduce  reduceRight

    // xxx(callback)  遍历数组 执行传入的回调函数

    // forEach  数组遍历
    // map      数组迭代(根据原数组得到新数组)
    // filter   数组筛选(筛选满足条件的元素  => 新数组)
    // some     数组判断(或) 是否存在满足条件的元素
    // every    数组判断(且) 是否所有的元素均满足条件 


    // forEach(callback)   数组遍历
    // 作用: 遍历数组,每次循环时执行传入的回调函数
    // 参数:
    // callback   回调函数可以接收三个参数(item 循环当前元素,index 下标,array 原数组) (用户可以按照自己的需求 提前决定好要执行的内容)

    // 返回值: undefined
    
    // var list = [2,8,4,6,5,7,9,3,1];
    // list.forEach(function(item,index,array){
    //     console.log(item,index,array);
    // })

    // map(callback)   数组迭代(根据原数组得到一个新数组)
    // 作用: 遍历数组,每次循环时执行传入的回调函数,接收回调函数的返回值,放到新数组中返回
    // 参数:
    // callback   回调函数可以接收三个参数(item 循环当前元素,index 下标,array 原数组) (用户可以按照自己的需求 提前决定好要执行的内容)

    // 返回值: 新数组
    
    // var list = [2,8,4,6,5,7,9,3,1];
    // var newArr = list.map(function(item,index,array){
    //     console.log(item,index,array);
    //     return item + 10;
    // })
    // console.log(list);
    // console.log(newArr);


    // filter(callback)   数组过滤/筛选
    // 作用: 遍历数组,每次循环时执行传入的回调函数,回调函数返回一个条件,把满足条件的元素放到新数组中返回(如果返回值不是一个条件,会隐式转布尔值)
    // 参数:
    // callback   回调函数可以接收三个参数(item 循环当前元素,index 下标,array 原数组) (用户可以按照自己的需求 提前决定好要执行的内容)

    // 返回值: 新数组

    // var list = [2,8,4,6,5,7,9,3,1];
    // var newArr = list.filter(function(item,index,array){
    //     console.log(item,index,array);
    //     // return item % 2 == 0;
    //     return item % 2;  // 0  1   => 奇数
    // })
    // console.log(list);
    // console.log(newArr);

    
    // some(callback)   数组(包含)
    // 作用: 遍历数组,每次循环时执行传入的回调函数,回调函数返回一个条件,只要有一个元素满足条件则返回true 都不满足则返回false(如果返回值不是一个条件,会隐式转布尔值)
    // 参数:
    // callback   回调函数可以接收三个参数(item 循环当前元素,index 下标,array 原数组) (用户可以按照自己的需求 提前决定好要执行的内容)
    // 返回值: true|false

    
    // 10 个数中是否存在大于60的数   假设法  假设不存在  => 找一个满足条件的
    // var list = [2,8,4,6,5,7,9,3,1];
    // var bool = list.some(function(item,index,array){
    //     console.log(item,index,array);
    //     return item > 5;
    // })
    // console.log(bool);


    // every(callback)   数组(都)
    // 作用: 遍历数组,每次循环时执行传入的回调函数,回调函数返回一个条件,都满足条件则返回true 只要有一个元素不满足则返回false (如果返回值不是一个条件,会隐式转布尔值)
    // 参数:
    // callback   回调函数可以接收三个参数(item 循环当前元素,index 下标,array 原数组) (用户可以按照自己的需求 提前决定好要执行的内容)
        
     // 返回值: true|false


    // 10 个数中是否都大于60的数   假设法  假设都大于60  => 找一个不满足条件的
    // var list = [2,8,4,6,5,7,9,3,1];
    // var bool = list.every(function(item,index,array){
    //     console.log(item,index,array);
    //     return item > 5;
    // })
    // console.log(bool);


    // reduce(callback,initValue)  数组累计
     // 作用: 遍历数组,每次循环时执行传入的回调函数,回调函数返回一个结果,将该结果代入到下次函数调用
    // 参数:
    // callback   回调函数可以接收三个参数( prev  item index array) (用户可以按照自己的需求 提前决定好要执行的内容)
    // prev  a.记录累加之前的初始值   (有初始值 就直接赋值,没有就默认是数组的第一个元素,从第二个开始遍历)
    //     b.记录每次函数执行的返回值
    // item  循环当前元素
    // index 下标
    // array 原数组

    // initValue   可选参数 (用于指定prev的初始值)
        
     // 返回值: true|false


    var list = [2,8,4,6,5,7,9,3,1]
    // var sum = 0;
    // for(var i=0;i<list.length;i++){
    //     var item = list[i];
    //     var index = i;
    //     var array = list;
    //     sum += item;
    // }

    // var sum = list.reduce(function(prev,item,index,array){
    //     console.log(prev,item,index,array);
    //     return prev + item;
    // },0);
    // console.log(sum);

    // var sum = list.reduce(function(prev,item,index,array){
    //     console.log(prev,item,index,array);
    //     return prev + item;
    // });
    // console.log(sum);

    var sum = list.reduceRight(function(prev,item,index,array){
        console.log(prev,item,index,array);
        return prev + item;
    },0);
    console.log(sum);

    var sum = list.reduceRight(function(prev,item,index,array){
        console.log(prev,item,index,array);
        return prev + item;
    });
    console.log(sum);

 


  




</script>
</html>